﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Web;
using System.Web.Script.Serialization;
using System.Web.UI;
using System.Web.UI.WebControls;
using Golos.Users.UserCache;
using Golos.Web.Utils;

namespace Golos.Web
{
    public partial class auth : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            LogClass.WriteDebugEntry("token=" + Request.Form["token"]);

            string uToken = Request.Form["token"];
            string s = "http://ulogin.ru/token.php?token=" + uToken + "&host=" + Request.ServerVariables["SERVER_NAME"];

            string link = string.Format("http://ulogin.ru/token.php?token={0}&host={1}", Request.Form["token"],
                                        Request.ServerVariables["SERVER_NAME"]);

            WebRequest reqGET = WebRequest.Create(link);
            WebResponse resp = reqGET.GetResponse();
            Stream stream = resp.GetResponseStream();
            StreamReader sr = new StreamReader(stream);
            string answer = sr.ReadToEnd();

            LogClass.WriteDebugEntry("ans=" + answer);

            iUser usr = JSONHelper.Deserialise<iUser>(answer);

            LogClass.WriteDebugEntry(usr.ToString());

            LogClass.WriteInfoEntry("Аутентификация " + usr.network);

            UserIdType net = new UserIdType();

            string name = usr.first_name + " " + usr.last_name;

            switch (usr.network)
            {
                case "vkontakte":
                    net = UserIdType.VK;
                    break;
                case "facebook":
                    net = UserIdType.FB;
                    break;
                case "twitter":
                    net = UserIdType.TW;
                    break;
                case "mailru":
                    net = UserIdType.MR;
                    break;
                case "google":
                    net = UserIdType.GL;
                    break;
                case "odnoklassniki":
                    net = UserIdType.OD;
                    break;
                case "yandex":
                    net = UserIdType.YA;
                    break;
                case "livejournal":
                    net = UserIdType.LJ;
                    break;
                case "openid":
                    net = UserIdType.OId;
                    break;
                case "liveid":
                    net = UserIdType.LId;
                    break;
                default:
                    net = UserIdType.Test;
                    break;
            }

            try
            {
                Token secretToken = TokenUtils.CheckSecretCookie(Request.Cookies);
                if (secretToken != null)
                {
                    //TODO: attach user;
                }

                Guid userId = HandlerBase.UsersClient.RegisterUser(name, net, usr.uid);

                Token token = new Token(userId, DateTime.Now.AddDays(Settings.ReadFromFile().TokenLifeTime));
                LogClass.WriteDebugEntry("User: " + token.User + " [net="+net+", uid=" + usr.uid + ", name=" + name + "]");

                TokenUtils.ToCookies(Response.Cookies, token);
            }
            catch (Exception ex)
            {
                Response.Write("{ \"error\": \"Не удалось авторизоваться.\" }");
                LogClass.WriteErrorEntry("Не удалось зарегистрировать пользователя "+net+". [net="+net+", uid=" + usr.uid +
                                         ", name=" + name + "]");
                LogClass.WriteErrorEntry(ex.ToString());
            }

            Response.Redirect("/");




            //file_get_contents
            //user = json_decode($s, true);
            //$user['network'] - соц. сеть, через которую авторизовался пользователь
            //$user['identity'] - уникальная строка определяющая конкретного пользователя соц. сети
            //$user['first_name'] - имя пользователя
            //$user['last_name'] - фамилия пользователя

        }
    }
}